/**
 * 主要作用是将嵌套对象中的属性值识别出来，比如data[a.b.c] !== data.a.b.c 但是=== data[a][b][c]
 * @param {数据对象} dataObj 
 * @param {模板变量的表现形式} keyName 
 */
export default function lookup(dataObj, keyName) {
  // 创建一个临时对象，用来表示循环一次之后得到的对象
  let temp = dataObj;
  // 判断这个模板变量关键字中有没有.，但是 . 会被解析，所以又不能是点. 意思就是.不能为第0位，所以indexOf>0就可以避免，但是不能写成！== -1
  if (keyName.indexOf('.') > 0) {
    // 有. 的话把他拆分成数组便于实现data[a][b][c]
    let keyArr = keyName.split('.');
    // 循环拆分之后的数组
    for (let i = 0; i < keyArr.length; i++) {
      // 将上一层得到的对象赋值给temp,用于下一层的查询
      temp = temp[keyArr[i]]
    }
    return temp;
  }
  // 如果没有 . 表示没有嵌套，直接返回
  return dataObj[keyName];
}